/**
 * Midlet principal de nuestra aplicacion, que constituye el punto de partida.
 *
 * NOTA: Deberemos recordar en todo momento el utilizar los recursos de la forma mas
 * eficiente posible (crear objetos cuando sea estrictamente necesario y liberar sus
 * recursos, una vez utilizados)
 */
package infbmobile.main;

// Importaciones externas
import javax.microedition.midlet.*;
import com.sun.lwuit.*;
import com.sun.lwuit.plaf.*;
import com.sun.lwuit.util.*;

// Importaciones internas
import infbmobile.almacenamiento.*;
import infbmobile.pantallas.*;
import infbmobile.comunicaciones.*;
import infbmobile.errores.*;
import infbmobile.util.*;
import javax.microedition.rms.RecordStore;

public class InfBMobile extends MIDlet {

    // Atributos en el fichero JAD
    public  String servidorWeb;
    public  String puerto;

    // Identificamos las pantallas de la aplicacion principal
    private PantallaRegistro pantallaRegistro;
    private PantallaActualizacionIdentificacion pantallaActIdent;
    private PantallaMenuPrincipal pantallaMenuPrincipal;
    private PantallaBusquedaMedicamentos pantallaBusquedaMedicamentos;
    private PantallaSimulador pantallaSimulador;
    private PantallaCitas pantallaCita;
    private PantallaTratamiento pantallaTratamiento;
    private PantallaReset pantallaReset;
    private PantallaCamara pantallaCamara;
    private PantallaPrincipalCitas pantallaPrincipalCitas;
    private Pantallacalendario pantallaPedirCita;

    /**
     * Metodo principal de comprobacion de arranque de la aplicacion: aqui estara la magia
     */
    private void cargarAplicacion() {
        // Mostramos la informacion de bienvenida al paciente
        UIHerramientas.mostrarAviso("Bienvenido", "Bienvenido a HospiGest Mobile. Se va a proceder a iniciar el mencanismo de autenticacion... espere unos instantes. Gracias");
        // Comprobamos el registro de identificacion del paciente
        if (Identificacion.cargar()) {
            // Si el usuario esta registrado comprobamos sus credenciales
            // Configuramos una comunicacion http mediante el uso de la libreria desarrollada
            ComunicacionHttp.setHost(servidorWeb);
            ComunicacionHttp.setPuerto(puerto);
            ComunicacionHttp http = new ComunicacionHttp(ComunicacionHttp.LOGIN, "Login", null);
            String[] nombreParametros = new String[]{"accion", "perfil", "identificacion", "password"};
            String[] valoresParametros = new String[]{"login", "paciente", Identificacion.getTarjetaSanitaria(), Identificacion.getPassword()};
            http.setNombreParametros(nombreParametros);
            http.setValoresParametros(valoresParametros);
            http.setCheckSesion(false);
            http.setModoHebra(false);
            http.conectar();
            // Interpretamos el codigo de la respuesta
            String codigo = http.getCodigoRespuesta();
            if (!codigo.equalsIgnoreCase(CodigosMensajes.OPERACION_ERRONEA)) {
                // El servidor comenzo la sesion y envio el identificador
                // al dispositivo movil para que este lo almacene local y temporalmente
                Identificacion.setIdSesion(codigo);
                Identificacion.establecerIdSesion();
                System.out.println("Guardado ID sesion correctamente:" + codigo);
                // Mostramos el menu principal
                mostrarPantallaMenuPrincipal();
            } else {
                // Mostrar la pantalla de actualizacion de registro
                mostrarPantallaActualizacionIdentificacion();
            }
        } else {
            UIHerramientas.mostrarAviso("Informacion", "Es la primera vez que usted ejecuta HospiGest Mobile, por tanto es necesario que rellene el formulario con sus parametros de identificacion. Gracias");
            mostrarPantallaRegistro();
        }
    }

    public void startApp() {
        try {
            // Recogemos los atributos del fichero JAD
            servidorWeb = getAppProperty("ServidorWeb");
            puerto = getAppProperty("Puerto");
            // Inicializamos el display de LWUIT
            Display.init(this);

            // Cargamos el aspecto de la aplicacion
            Resources r = Resources.open("/res/temas/hospigest_theme.res");
            UIManager.getInstance().setThemeProps(r.getTheme(r.getThemeResourceNames()[0]));
            // Cargamos el nucleo de la aplicacion
            //mostrarPantallaRegistro();
            cargarAplicacion();
             //mostrarPantallaCamara();
            //mostrarPantallaSimulador();
            //mostrarPantallaMenuPrincipal();

        //Identificacion.borrar("identificacion");
        } catch (MovilException me) {
            UIHerramientas.mostrarAviso("Error", "Se ha producido un problema en la aplicacion => " + me.getMessage());
        } catch (Exception e) {
            UIHerramientas.mostrarAviso("Error", "Se ha producido un problema en la aplicacion => " + e.getMessage());
        }
    }

    public void pauseApp() {
    }

    public void destroyApp(boolean unconditional) {
        notifyDestroyed();
    }

    public void salir() {
        System.gc();
        destroyApp(false);
    }

    /*----------------------------------------------------------------------------------*/
    /**
     * Metodos para mostrar las diferentes pantallas que componen la navegabilidad
     * de la aplicacion
     */
    public void mostrarPantallaRegistro() {
        if (pantallaRegistro == null) {
            pantallaRegistro = new PantallaRegistro(this);
        }
        pantallaRegistro.show();
    }

    public void mostrarPantallaActualizacionIdentificacion() {
        if (pantallaActIdent == null) {
            pantallaActIdent = new PantallaActualizacionIdentificacion(this);
        }
        pantallaActIdent.show();
    }

    public void mostrarPantallaMenuPrincipal() {
        if (pantallaMenuPrincipal == null) {
            pantallaMenuPrincipal = new PantallaMenuPrincipal(this);
        }
        pantallaMenuPrincipal.show();
    }

    public void mostrarPantallaBusquedaMedicamentos() {
        if (pantallaBusquedaMedicamentos == null) {
            pantallaBusquedaMedicamentos = new PantallaBusquedaMedicamentos(this);
        }
        pantallaBusquedaMedicamentos.show();
    }

    public void mostrarPantallaSimulador() {
        if (pantallaSimulador == null) {
            pantallaSimulador = new PantallaSimulador(this);
        }
        pantallaSimulador.show();
    }

    public void mostrarPantallaCitas() {
        if (pantallaCita == null) {
            pantallaCita = new PantallaCitas(this);
        }
        pantallaCita.show();
    }

    public void mostrarPantallaTratamiento() {
        if (pantallaTratamiento == null) {
            pantallaTratamiento = new PantallaTratamiento(this);
        }
        pantallaTratamiento.show();
    }

    public void mostrarPantallaReset() {
        if(pantallaReset==null){
            pantallaReset=new PantallaReset(this);
        }
        pantallaReset.show();
    }

    public void mostrarPantallaCamara() {
        if(pantallaCamara==null){
            pantallaCamara=new PantallaCamara(this);
        }
        //pantallaCamara.show();
    }
    public void mostrarPantallaPrincipalCitas(){
    if(pantallaPrincipalCitas==null){
            pantallaPrincipalCitas=new PantallaPrincipalCitas(this);
        }
        pantallaPrincipalCitas.show();
    }
     public void mostrarPantallaPedirCita(){

            pantallaPedirCita=new Pantallacalendario(this);
        
              pantallaPedirCita.show();
        System.gc();
    }

}
